﻿//
// XN4SL - Xna Framework for Silverlight.
//
using Xn4Sl.Framework;
using System;
using System.ComponentModel;

namespace Xn4Sl.Framework.Graphics
{
    /// <summary>
    /// Represents a color using Red, Green, Blue, and Alpha values.
    /// </summary>
    public struct Color
    {
        #region Color Components

        /// <summary>
        /// Gets or sets the alpha component value.
        /// </summary>
        private byte a;
        public byte A
        {
            get
            {
                return this.a;
            }
            set
            {
                this.a = value;
            }
        }

        /// <summary>
        /// Gets or sets the red component value of this Color.
        /// </summary>
        private byte r;
        public byte R
        {
            get
            {
                return this.r;
            }
            set
            {
                this.r = value;
            }
        }

        /// <summary>
        /// Gets or sets the green component value of this Color.
        /// </summary>
        private byte g;
        public byte G
        {
            get
            {
                return this.g;
            }
            set
            {
                this.g = value;
            }
        }

        /// <summary>
        /// Gets or sets the blue component value of this Color.
        /// </summary>
        private byte b;
        public byte B
        {
            get
            {
                return this.b;
            }
            set
            {
                this.b = value;
            }
        }

        #endregion

        //[CLSCompliant(false)]
        public uint PackedValue
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        /// <summary>
        /// Initializes a new instance of Color.
        /// </summary>
        /// <param name="rgb">A Color specifying the red, green, and blue components of a color.</param>
        /// <param name="a">The alpha component of a color.</param>
        public Color(Color rgb, byte a)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// Initializes a new instance of Color.
        /// </summary>
        /// <param name="rgb">A Color specifying the red, green, and blue components of a color.</param>
        /// <param name="a">The alpha component of a color, between 0 and 1.0.</param>
        public Color(Color rgb, float a)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// Initializes a new instance of Color.
        /// </summary>
        /// <param name="vector">A Framework.Vector3 containing the Red, Green, 
        /// and Blue values defining a color.</param>
        public Color(Vector3 vector)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// Initializes a new instance of Color.
        /// </summary>
        /// <param name="vector">A Framework.Vector4 containing the Red, Green, 
        /// Blue, and Alpha values defining a color.</param>
        public Color(Vector4 vector)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// Initializes a new instance of Color.
        /// </summary>
        /// <param name="r">The red component of a color.</param>
        /// <param name="g">The green component of a color.</param>
        /// <param name="b">The blue component of a color.</param>
        public Color(byte r, byte g, byte b) : this(r, g, b, 0xff) { }

        /// <summary>
        /// Initializes a new instance of Color.
        /// </summary>
        /// <param name="r">The red component of a color, between 0 and 1.0.</param>
        /// <param name="g">The green component of a color, between 0 and 1.0.</param>
        /// <param name="b">The blue component of a color, between 0 and 1.0.</param>
        public Color(float r, float g, float b) : this(r, g, b, 1f) { }

        /// <summary>
        /// Initializes a new instance of Color.
        /// </summary>
        /// <param name="r">The red component of a color, between 0 and 0xff.</param>
        /// <param name="g">The green component of a color, between 0 and 0xff.</param>
        /// <param name="b">The blue component of a color, between 0 and 0xff.</param>
        /// <param name="a">The alpha component of a color, between 0 and 0xff.</param>
        public Color(byte r, byte g, byte b, byte a)
        {
            this.a = a;
            this.r = r;
            this.g = g;
            this.b = b;
        }

        /// <summary>
        /// Initializes a new instance of Color.
        /// </summary>
        /// <param name="r">The red component of a color, between 0 and 1.0.</param>
        /// <param name="g">The green component of a color, between 0 and 1.0.</param>
        /// <param name="b">The blue component of a color, between 0 and 1.0.</param>
        /// <param name="a">The alpha component of a color, between 0 and 1.0.</param>
        public Color(float r, float g, float b, float a)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// Compares two objects to determine whether they are different.
        /// </summary>
        /// <param name="a">The object to the left of the equality operator.</param>
        /// <param name="b">The object to the right of the equality operator.</param>
        /// <returns>true if the objects are different; false otherwise.</returns>
        public static bool operator !=(Color a, Color b)
        {
            return !(a == b);
        }

        /// <summary>
        /// Compares two objects to determine whether they are the same.
        /// </summary>
        /// <param name="a">The object to the left of the equality operator.</param>
        /// <param name="b">The object to the right of the equality operator.</param>
        /// <returns>true if the objects are the same; false otherwise.</returns>
        public static bool operator ==(Color a, Color b)
        {
            return (a.Equals(b));
        }

        /// <summary>
        /// Gets a system-defined color with the value R:240 G:248 B:255 A:255.
        /// </summary>
        public static Color AliceBlue { get { return new Color(240, 248, 255); } }
        
        /// <summary>
        /// Gets a system-defined color with the value R:250 G:235 B:215 A:255.
        /// </summary>
        public static Color AntiqueWhite { get { return new Color(250, 235, 215); } }

        /// <summary>
        /// Gets a system-defined color with the value R:0 G:255 B:255 A:255.
        /// </summary>
        public static Color Aqua { get { return new Color(0, 255, 255); } }

        /// <summary>
        /// Gets a system-defined color with the value R:127 G:255 B:212 A:255.
        /// </summary>
        public static Color Aquamarine { get { return new Color(127, 255, 212); } }

        /// <summary>
        /// Gets a system-defined color with the value R:240 G:255 B:255 A:255.
        /// </summary>
        public static Color Azure { get { return new Color(240, 255, 255); } }

        /// <summary>
        /// Gets a system-defined color with the value R:245 G:245 B:220 A:255.
        /// </summary>
        public static Color Beige { get { return new Color(245, 245, 220); } }

        /// <summary>
        /// Gets a system-defined color with the value R:255 G:228 B:196 A:255.
        /// </summary>
        public static Color Bisque { get { return new Color(255, 228, 196); } }
        
        /// <summary>
        /// Gets a system-defined color with the value R:0 G:0 B:0 A:255.
        /// </summary>
        public static Color Black { get { return new Color(0, 0, 0); } }

        /// <summary>
        /// Gets a system-defined color with the value R:255 G:235 B:205 A:255.
        /// </summary>
        public static Color BlanchedAlmond { get { return new Color(255, 235, 205); } }

        /// <summary>
        /// Gets a system-defined color with the value R:0 G:0 B:255 A:255.
        /// </summary>
        public static Color Blue { get { return new Color(0, 0, 255); } }

        //     Gets a system-defined color with the value R:138 G:43 B:226 A:255.
        /// </summary>
        public static Color BlueViolet { get { return new Color(138, 43, 226); } }

        //     Gets a system-defined color with the value R:165 G:42 B:42 A:255.
        /// </summary>
        public static Color Brown { get { return new Color(165, 42, 42); } }

        //     Gets a system-defined color with the value R:222 G:184 B:135 A:255.
        /// </summary>
        public static Color BurlyWood { get { return new Color(222, 184, 135); } }

        //     Gets a system-defined color with the value R:95 G:158 B:160 A:255.
        /// </summary>
        public static Color CadetBlue { get { return new Color(95, 158, 160); } }

        //     Gets a system-defined color with the value R:127 G:255 B:0 A:255.
        /// </summary>
        public static Color Chartreuse { get { return new Color(127, 255, 0); } }

        //     Gets a system-defined color with the value R:210 G:105 B:30 A:255.
        /// </summary>
        public static Color Chocolate { get { return new Color(210, 105, 30); } }

        //     Gets a system-defined color with the value R:255 G:127 B:80 A:255.
        public static Color Coral { get { return new Color(255, 127, 80); } }

        //     Gets a system-defined color with the value R:100 G:149 B:237 A:255.
        public static Color CornflowerBlue { get { return new Color(100, 149, 237); } }

        //     Gets a system-defined color with the value R:255 G:248 B:220 A:255.
        public static Color Cornsilk { get { return new Color(255, 248, 220); } }

        //     Gets a system-defined color with the value R:220 G:20 B:60 A:255.
        public static Color Crimson { get { return new Color(220, 20, 60); } }

        //     Gets a system-defined color with the value R:0 G:255 B:255 A:255.
        public static Color Cyan { get { return new Color(0, 255, 255); } }

        //     Gets a system-defined color with the value R:0 G:0 B:139 A:255.
        public static Color DarkBlue { get { return new Color(0, 0, 139); } }

        //     Gets a system-defined color with the value R:0 G:139 B:139 A:255.
        public static Color DarkCyan { get { return new Color(0, 139, 139); } }

        //     Gets a system-defined color with the value R:184 G:134 B:11 A:255.
        public static Color DarkGoldenrod { get { return new Color(184, 134, 11); } }

        //     Gets a system-defined color with the value R:169 G:169 B:169 A:255.
        public static Color DarkGray { get { return new Color(169, 169, 169); } }

        //     Gets a system-defined color with the value R:0 G:100 B:0 A:255.
        public static Color DarkGreen { get { return new Color(0, 100, 0); } }

        //     Gets a system-defined color with the value R:189 G:183 B:107 A:255.
        public static Color DarkKhaki { get { return new Color(189, 183, 107); } }

        //     Gets a system-defined color with the value R:139 G:0 B:139 A:255.
        public static Color DarkMagenta { get { return new Color(139, 0, 139); } }

        //     Gets a system-defined color with the value R:85 G:107 B:47 A:255.
        public static Color DarkOliveGreen { get { return new Color(85, 107, 47); } }

        //     Gets a system-defined color with the value R:255 G:140 B:0 A:255.
        public static Color DarkOrange { get { return new Color(255, 140, 0); } }

        //     Gets a system-defined color with the value R:153 G:50 B:204 A:255.
        public static Color DarkOrchid { get { return new Color(153, 50, 204); } }

        //     Gets a system-defined color with the value R:139 G:0 B:0 A:255.
        public static Color DarkRed { get { return new Color(139, 0, 0); } }

        //     Gets a system-defined color with the value R:233 G:150 B:122 A:255.
        public static Color DarkSalmon { get { return new Color(233, 150, 122); } }

        //     Gets a system-defined color with the value R:143 G:188 B:139 A:255.
        public static Color DarkSeaGreen { get { return new Color(143, 188, 139); } }

        //     Gets a system-defined color with the value R:72 G:61 B:139 A:255.
        public static Color DarkSlateBlue { get { return new Color(72, 61, 139); } }

        //     Gets a system-defined color with the value R:47 G:79 B:79 A:255.
        public static Color DarkSlateGray { get { return new Color(47, 79, 79); } }

        //     Gets a system-defined color with the value R:0 G:206 B:209 A:255.
        public static Color DarkTurquoise { get { return new Color(0, 206, 209); } }

        //     Gets a system-defined color with the value R:148 G:0 B:211 A:255.
        public static Color DarkViolet { get { return new Color(148, 0, 211); } }

        //     Gets a system-defined color with the value R:255 G:20 B:147 A:255.
        public static Color DeepPink { get { return new Color(255, 20, 147); } }

        //     Gets a system-defined color with the value R:0 G:191 B:255 A:255.
        public static Color DeepSkyBlue { get { return new Color(0, 191, 255); } }

        //     Gets a system-defined color with the value R:105 G:105 B:105 A:255.
        public static Color DimGray { get { return new Color(105, 105, 105); } }

        //     Gets a system-defined color with the value R:30 G:144 B:255 A:255.
        public static Color DodgerBlue { get { return new Color(30, 144, 255); } }

        //     Gets a system-defined color with the value R:178 G:34 B:34 A:255.
        public static Color Firebrick { get { return new Color(178, 34, 34); } }

        //     Gets a system-defined color with the value R:255 G:250 B:240 A:255.
        public static Color FloralWhite { get { return new Color(255, 250, 240); } }

        //     Gets a system-defined color with the value R:34 G:139 B:34 A:255.
        public static Color ForestGreen { get { return new Color(34, 139, 34); } }

        //     Gets a system-defined color with the value R:255 G:0 B:255 A:255.
        public static Color Fuchsia { get { return new Color(255, 0, 255); } }

        //     Gets a system-defined color with the value R:220 G:220 B:220 A:255.
        public static Color Gainsboro { get { return new Color(220, 220, 220); } }

        /// <summary>
        /// Gets a system-defined color with the value R:248 G:248 B:255 A:255.
        /// </summary>
        public static Color GhostWhite { get { return new Color(248, 248, 255); } }

        /// <summary>
        /// Gets a system-defined color with the value R:255 G:215 B:0 A:255.
        /// </summary>
        public static Color Gold { get { return new Color(255, 215, 0); } }

        /// <summary>
        /// Gets a system-defined color with the value R:218 G:165 B:32 A:255.
        /// </summary>
        public static Color Goldenrod { get { return new Color(218, 165, 32); } }

        /// <summary>
        /// Gets a system-defined color with the value R:128 G:128 B:128 A:255.
        /// </summary>
        public static Color Gray { get { return new Color(128, 128, 128); } }

        /// <summary>
        /// Gets a system-defined color with the value R:0 G:128 B:0 A:255.
        /// </summary>
        public static Color Green { get { return new Color(0, 128, 0); } }

        /// <summary>
        /// Gets a system-defined color with the value R:173 G:255 B:47 A:255.
        /// </summary>
        public static Color GreenYellow { get { return new Color(173, 255, 47); } }

        /// <summary>
        /// Gets a system-defined color with the value R:240 G:255 B:240 A:255.
        /// </summary>
        public static Color Honeydew { get { return new Color(240, 255, 240); } }

        /// <summary>
        /// Gets a system-defined color with the value R:255 G:105 B:180 A:255.
        /// </summary>
        public static Color HotPink { get { return new Color(255, 105, 180); } }

        /// <summary>
        /// Gets a system-defined color with the value R:205 G:92 B:92 A:255.
        /// </summary>
        public static Color IndianRed { get { return new Color(205, 92, 92); } }

        /// <summary>
        /// Gets a system-defined color with the value R:75 G:0 B:130 A:255.
        /// </summary>
        public static Color Indigo { get { return new Color(75, 0, 130); } }

        /// <summary>
        /// Gets a system-defined color with the value R:255 G:255 B:240 A:255.
        /// </summary>
        public static Color Ivory { get { return new Color(255, 255, 240); } }

        /// <summary>
        /// Gets a system-defined color with the value R:240 G:230 B:140 A:255.
        /// </summary>
        public static Color Khaki { get { return new Color(240, 230, 140); } }

        /// <summary>
        /// Gets a system-defined color with the value R:230 G:230 B:250 A:255.
        /// </summary>
        public static Color Lavender { get { return new Color(230, 230, 250); } }

        /// <summary>
        /// Gets a system-defined color with the value R:255 G:240 B:245 A:255.
        /// </summary>
        public static Color LavenderBlush { get { return new Color(255, 240, 245); } }

        /// <summary>
        /// Gets a system-defined color with the value R:124 G:252 B:0 A:255.
        /// </summary>
        public static Color LawnGreen { get { return new Color(124, 252, 0); } }

        /// <summary>
        /// Gets a system-defined color with the value R:255 G:250 B:205 A:255.
        /// </summary>
        public static Color LemonChiffon { get { return new Color(255, 250, 205); } }

        /// <summary>
        /// Gets a system-defined color with the value R:173 G:216 B:230 A:255.
        /// </summary>
        public static Color LightBlue { get { return new Color(173, 216, 230); } }
        
        /// <summary>
        /// Gets a system-defined color with the value R:240 G:128 B:128 A:255.
        /// </summary>
        public static Color LightCoral { get { return new Color(240, 128, 128); } }

        //     Gets a system-defined color with the value R:224 G:255 B:255 A:255.
        //
        /// </summary>
        //     A system-defined color with the value R: G: B: A:255.
        public static Color LightCyan { get { return new Color(224, 255, 255); } }

        //     Gets a system-defined color with the value R:250 G:250 B:210 A:255.
        //
        /// </summary>
        //     A system-defined color with the value R: G: B: A:255.
        public static Color LightGoldenrodYellow { get { return new Color(250, 250, 210); } }

        //     Gets a system-defined color with the value R:211 G:211 B:211 A:255.
        //
        /// </summary>
        //     A system-defined color with the value R: G: B: A:255.
        public static Color LightGray { get { return new Color(211, 211, 211); } }

        //     Gets a system-defined color with the value R:144 G:238 B:144 A:255.
        //
        /// </summary>
        //     A system-defined color with the value R: G: B: A:255.
        public static Color LightGreen { get { return new Color(144, 238, 144); } }

        //     Gets a system-defined color with the value R:255 G:182 B:193 A:255.
        //
        /// </summary>
        //     A system-defined color with the value R: G: B: A:255.
        public static Color LightPink { get { return new Color(255, 182, 193); } }

        //     Gets a system-defined color with the value R:255 G:160 B:122 A:255.
        /// </summary>
        public static Color LightSalmon { get { return new Color(255, 160, 122); } }

        //     Gets a system-defined color with the value R:32 G:178 B:170 A:255.
        /// </summary>
        public static Color LightSeaGreen { get { return new Color(32, 178, 170); } }

        //     Gets a system-defined color with the value R:135 G:206 B:250 A:255.
        /// </summary>
        public static Color LightSkyBlue { get { return new Color(135, 206, 250); } }

        //     Gets a system-defined color with the value R:119 G:136 B:153 A:255.
        /// </summary>
        public static Color LightSlateGray { get { return new Color(119, 136, 153); } }

        //     Gets a system-defined color with the value R:176 G:196 B:222 A:255.
        /// </summary>
        public static Color LightSteelBlue { get { return new Color(176, 196, 222); } }

        //     Gets a system-defined color with the value R:255 G:255 B:224 A:255.
        /// </summary>
        public static Color LightYellow { get { return new Color(255, 255, 224); } }

        //     Gets a system-defined color with the value R:0 G:255 B:0 A:255.
        /// </summary>
        public static Color Lime { get { return new Color(0, 255, 0); } }

        //     Gets a system-defined color with the value R:50 G:205 B:50 A:255.
        /// </summary>
        public static Color LimeGreen { get { return new Color(50, 205, 50); } }

        //     Gets a system-defined color with the value R:250 G:240 B:230 A:255.
        /// </summary>
        public static Color Linen { get { return new Color(250, 240, 230); } }

        //     Gets a system-defined color with the value R:255 G:0 B:255 A:255.
        /// </summary>
        public static Color Magenta { get { return new Color(255, 0, 255); } }

        //     Gets a system-defined color with the value R:128 G:0 B:0 A:255.
        /// </summary>
        public static Color Maroon { get { return new Color(128, 0, 0); } }

        //     Gets a system-defined color with the value R:102 G:205 B:170 A:255.
        /// </summary>
        public static Color MediumAquamarine { get { return new Color(102, 205, 170); } }

        //     Gets a system-defined color with the value R:0 G:0 B:205 A:255.
        /// </summary>
        public static Color MediumBlue { get { return new Color(0, 0, 205); } }

        //     Gets a system-defined color with the value R:186 G:85 B:211 A:255.
        /// </summary>
        public static Color MediumOrchid { get { return new Color(186, 85, 211); } }

        //     Gets a system-defined color with the value R:147 G:112 B:219 A:255.
        /// </summary>
        public static Color MediumPurple { get { return new Color(147, 112, 219); } }

        //     Gets a system-defined color with the value R:60 G:179 B:113 A:255.
        /// </summary>
        public static Color MediumSeaGreen { get { return new Color(60, 179, 113); } }

        //     Gets a system-defined color with the value R:123 G:104 B:238 A:255.
        /// </summary>
        public static Color MediumSlateBlue { get { return new Color(123, 104, 238); } }

        //     Gets a system-defined color with the value R:0 G:250 B:154 A:255.
        /// </summary>
        public static Color MediumSpringGreen { get { return new Color(0, 250, 154); } }

        //     Gets a system-defined color with the value R:72 G:209 B:204 A:255.
        /// </summary>
        public static Color MediumTurquoise { get { return new Color(72, 209, 204); } }

        //     Gets a system-defined color with the value R:199 G:21 B:133 A:255.
        /// </summary>
        public static Color MediumVioletRed { get { return new Color(199, 21, 133); } }

        //     Gets a system-defined color with the value R:25 G:25 B:112 A:255.
        /// </summary>
        public static Color MidnightBlue { get { return new Color(25, 25, 112); } }

        //     Gets a system-defined color with the value R:245 G:255 B:250 A:255.
        /// </summary>
        public static Color MintCream { get { return new Color(245, 255, 250); } }

        //     Gets a system-defined color with the value R:255 G:228 B:225 A:255.
        /// </summary>
        public static Color MistyRose { get { return new Color(255, 228, 225); } }

        //     Gets a system-defined color with the value R:255 G:228 B:181 A:255.
        /// </summary>
        public static Color Moccasin { get { return new Color(255, 228, 181); } }

        //     Gets a system-defined color with the value R:255 G:222 B:173 A:255.
        /// </summary>
        public static Color NavajoWhite { get { return new Color(255, 222, 173); } }

        //     Gets a system-defined color R:0 G:0 B:128 A:255.
        /// </summary>
        public static Color Navy { get { return new Color(0, 0, 128); } }

        /// <summary>
        /// Gets a system-defined color with the value R:253 G:245 B:230 A:255.
        /// </summary>
        public static Color OldLace { get { return new Color(253, 245, 230); } }

        /// <summary>
        /// Gets a system-defined color with the value R:128 G:128 B:0 A:255.
        /// </summary>
        public static Color Olive { get { return new Color(128, 128, 0); } }

        /// <summary>
        /// Gets a system-defined color with the value R:107 G:142 B:35 A:255.
        /// </summary>
        public static Color OliveDrab { get { return new Color(107, 142, 35); } }

        /// <summary>
        /// Gets a system-defined color with the value R:255 G:165 B:0 A:255.
        /// </summary>
        public static Color Orange { get { return new Color(255, 165, 0); } }

        /// <summary>
        /// Gets a system-defined color with the value R:255 G:69 B:0 A:255.
        /// </summary>
        public static Color OrangeRed { get { return new Color(255, 69, 0); } }

        /// <summary>
        /// Gets a system-defined color with the value R:218 G:112 B:214 A:255.
        /// </summary>
        public static Color Orchid { get { return new Color(218, 112, 214); } }

        /// <summary>
        /// Gets a system-defined color with the value R:238 G:232 B:170 A:255.
        /// </summary>
        public static Color PaleGoldenrod { get { return new Color(238, 232, 170); } }

        /// <summary>
        /// Gets a system-defined color with the value R:152 G:251 B:152 A:255.
        /// </summary>
        public static Color PaleGreen { get { return new Color(152, 251, 152); } }

        /// <summary>
        /// Gets a system-defined color with the value R:175 G:238 B:238 A:255.
        /// </summary>
        public static Color PaleTurquoise { get { return new Color(175, 238, 238); } }

        /// <summary>
        /// Gets a system-defined color with the value R:219 G:112 B:147 A:255.
        /// </summary>
        public static Color PaleVioletRed { get { return new Color(219, 112, 147); } }

        /// <summary>
        /// Gets a system-defined color with the value R:255 G:239 B:213 A:255.
        /// </summary>
        public static Color PapayaWhip { get { return new Color(255, 239, 213); } }

        /// <summary>
        /// Gets a system-defined color with the value R:255 G:218 B:185 A:255.
        /// </summary>
        public static Color PeachPuff { get { return new Color(255, 218, 185); } }

        /// <summary>
        /// Gets a system-defined color with the value R:205 G:133 B:63 A:255.
        /// </summary>
        public static Color Peru { get { return new Color(205, 133, 63); } }

        /// <summary>
        /// Gets a system-defined color with the value R:255 G:192 B:203 A:255.
        /// </summary>
        public static Color Pink { get { return new Color(255, 192, 203); } }

        /// <summary>
        /// Gets a system-defined color with the value R:221 G:160 B:221 A:255.
        /// </summary>
        public static Color Plum { get { return new Color(221, 160, 221); } }

        /// <summary>
        /// Gets a system-defined color with the value R:176 G:224 B:230 A:255.
        /// </summary>
        public static Color PowderBlue { get { return new Color(176, 224, 230); } }

        /// <summary>
        /// Gets a system-defined color with the value R:128 G:0 B:128 A:255.
        /// </summary>
        public static Color Purple { get { return new Color(128, 0, 128); } }

        /// <summary>
        /// Gets a system-defined color with the value R:255 G:0 B:0 A:255.
        /// </summary>
        public static Color Red { get { return new Color(255, 0, 0); } }

        /// <summary>
        /// Gets a system-defined color with the value R:188 G:143 B:143 A:255.
        /// </summary>
        public static Color RosyBrown { get { return new Color(188, 143, 143); } }

        /// <summary>
        /// Gets a system-defined color with the value R:65 G:105 B:225 A:255.
        /// </summary>
        public static Color RoyalBlue { get { return new Color(65, 105, 225); } }

        /// <summary>
        /// Gets a system-defined color with the value R:139 G:69 B:19 A:255.
        /// </summary>
        public static Color SaddleBrown { get { return new Color(139, 69, 19); } }

        /// <summary>
        /// Gets a system-defined color with the value R:250 G:128 B:114 A:255.
        /// </summary>
        public static Color Salmon { get { return new Color(250, 128, 114); } }

        /// <summary>
        /// Gets a system-defined color with the value R:244 G:164 B:96 A:255.
        /// </summary>
        public static Color SandyBrown { get { return new Color(244, 164, 96); } }

        /// <summary>
        /// Gets a system-defined color with the value R:46 G:139 B:87 A:255.
        /// </summary>
        public static Color SeaGreen { get { return new Color(46, 139, 87); } }

        /// <summary>
        /// Gets a system-defined color with the value R:255 G:245 B:238 A:255.
        /// </summary>
        public static Color SeaShell { get { return new Color(255, 245, 238); } }

        /// <summary>
        /// Gets a system-defined color with the value R:160 G:82 B:45 A:255.
        /// </summary>
        public static Color Sienna { get { return new Color(160, 82, 45); } }

        /// <summary>
        /// Gets a system-defined color with the value R:192 G:192 B:192 A:255.
        /// </summary>
        public static Color Silver { get { return new Color(192, 192, 192); } }

        /// <summary>
        /// Gets a system-defined color with the value R:135 G:206 B:235 A:255.
        /// </summary>
        public static Color SkyBlue { get { return new Color(135, 206, 235); } }

        /// <summary>
        /// Gets a system-defined color with the value R:106 G:90 B:205 A:255.
        /// </summary>
        public static Color SlateBlue { get { return new Color(106, 90, 205); } }

        /// <summary>
        /// Gets a system-defined color with the value R:112 G:128 B:144 A:255.
        /// </summary>
        public static Color SlateGray { get { return new Color(112, 128, 144); } }

        /// <summary>
        /// Gets a system-defined color with the value R:255 G:250 B:250 A:255.
        /// </summary>
        public static Color Snow { get { return new Color(255, 250, 250); } }

        /// <summary>
        /// Gets a system-defined color with the value R:0 G:255 B:127 A:255.
        /// </summary>
        public static Color SpringGreen { get { return new Color(0, 255, 127); } }

        /// <summary>
        /// Gets a system-defined color with the value R:70 G:130 B:180 A:255.
        /// </summary>
        public static Color SteelBlue { get { return new Color(70, 130, 180); } }

        /// <summary>
        /// Gets a system-defined color with the value R:210 G:180 B:140 A:255.
        /// </summary>
        public static Color Tan { get { return new Color(210, 180, 140); } }

        /// <summary>
        /// Gets a system-defined color with the value R:0 G:128 B:128 A:255.
        /// </summary>
        public static Color Teal { get { return new Color(0, 128, 128); } }

        /// <summary>
        /// Gets a system-defined color with the value R:216 G:191 B:216 A:255.
        /// </summary>
        public static Color Thistle { get { return new Color(216, 191, 216); } }

        /// <summary>
        /// Gets a system-defined color with the value R:255 G:99 B:71 A:255.
        /// </summary>
        public static Color Tomato { get { return new Color(255, 99, 71); } }

        /// <summary>
        /// Gets a system-defined color with the value R:0 G:0 B:0 A:0.
        /// </summary>
        public static Color TransparentBlack { get { return new Color(0, 0, 0, 0); } }

        /// <summary>
        /// Gets a system-defined color with the value R:255 G:255 B:255 A:0.
        /// </summary>
        public static Color TransparentWhite { get { return new Color(255, 255, 255, 0); } }

        /// <summary>
        /// Gets a system-defined color with the value R:64 G:224 B:208 A:255.
        /// </summary>
        public static Color Turquoise { get { return new Color(64, 224, 208); } }

        /// <summary>
        /// Gets a system-defined color with the value R:238 G:130 B:238 A:255.
        /// </summary>
        public static Color Violet { get { return new Color(238, 130, 238); } }
        
        /// <summary>
        /// Gets a system-defined color with the value R:245 G:222 B:179 A:255.
        /// </summary>
        public static Color Wheat { get { return new Color(245, 222, 179); } }

        /// <summary>
        /// Gets a system-defined color with the value R:255 G:255 B:255 A:255.
        /// </summary>
        public static Color White { get { return new Color(255, 255, 255); } }

        /// <summary>
        /// Gets a system-defined color with the value R:245 G:245 B:245 A:255.
        /// </summary>
        public static Color WhiteSmoke { get { return new Color(245, 245, 245); } }

        /// <summary>
        /// Gets a system-defined color with the value R:255 G:255 B:0 A:255.
        /// </summary>
        public static Color Yellow { get { return new Color(255, 255, 0); } }

        /// <summary>
        /// Gets a system-defined color with the value R:154 G:205 B:50 A:255.
        /// </summary>
        public static Color YellowGreen { get { return new Color(154, 205, 50); } }

        /// <summary>
        /// Returns a value that indicates whether the current instance is equal to a specified object.
        /// </summary>
        /// <param name="other">The Color to compare with the current Color.</param>
        /// <returns>true if the objects are the same; false otherwise.</returns>
        public bool Equals(Color other)
        {
            return this.GetHashCode() == other.GetHashCode();
        }

        /// <summary>
        /// Returns a value that indicates whether the current instance is equal to a specified object.
        /// </summary>
        /// <param name="obj">The System.Object to compare with the current Color.</param>
        /// <returns>true if the objects are the same; false otherwise.</returns>
        public override bool Equals(object obj)
        {
            return this.GetHashCode() == obj.GetHashCode();
        }

        /// <summary>
        /// Gets the hash code for this instance.
        /// </summary>
        /// <returns>Hash code for this object.</returns>
        public override int GetHashCode()
        {
            return this.A.GetHashCode() ^
                   this.R.GetHashCode() ^
                   this.G.GetHashCode() ^
                   this.B.GetHashCode();
        }

        /// <summary>
        /// Linearly interpolates between two colors.
        /// </summary>
        /// <param name="value1">Source Color.</param>
        /// <param name="value2">Source Color.</param>
        /// <param name="amount">A value between 0 and 1.0 indicating the weight of value2.</param>
        /// <returns>The interpolated Color.</returns>
        public static Color Lerp(Color value1, Color value2, float amount)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// Gets a string representation of this object.
        /// </summary>
        /// <returns>String representation of this object.</returns>
        public override string ToString()
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// Returns the current color as a Framework.Vector3.
        /// </summary>
        /// <returns>The current color represented as a Framework.Vector3.</returns>
        public Vector3 ToVector3()
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// Returns the current color as a Framework.Vector4.
        /// </summary>
        /// <returns>The current color represented as a Framework.Vector4.</returns>
        public Vector4 ToVector4()
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// Returns the current color as a System.Windows.Media.Color.
        /// </summary>
        /// <returns>The current color represented as a System.Windows.Media.Color</returns>
        public System.Windows.Media.Color ToColor()
        {
            return System.Windows.Media.Color.FromArgb(this.A, this.R, this.G, this.B);
        }
    }
}
